package com.example.demo.BaiDuAI;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.example.demo.HTTPTest.util.OKHttpUtil;
import lombok.extern.slf4j.Slf4j;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author FF998
 */
@Slf4j
public class DialogueSystem {

    private static final String APP_ID = "40879528";
    private static final String API_KEY = "NbXnYPk68PH6qCFxdisQ8GZc";
    private static final String SECRET_KEY = "gc8DVimT1N1fanjPmAhkIug2k9dRDGF0";

    public static void main(String[] args) throws IOException {

//        String token = getToken();
        String token = "24.8214f68a6e21355de96cab6b276d6a8c.2592000.1699609944.282335-40879528";

        String url = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions?access_token=" + token;
        JSONObject params = new JSONObject();
        List<Map> list = new ArrayList<>();
        Map<String, String> map = new HashMap<>(2);
        map.put("role","user");
        map.put("content","来一段剪短的自我介绍");
        list.add(map);

        map = new HashMap<>(2);
        map.put("role","assistant");
        map.put("content","你好，我叫林小云，今年30岁，我是一名具有硕士学位的计算机科学家。我目前正在寻找一份软件开发的工作。我对人工智能和机器学习有深厚的理解，并且曾在一个大型科技公司工作过，负责开发他们的推荐算法。除此之外，我热爱音乐，喜欢弹吉他和钢琴。我相信我的技术和音乐背景能够使我更好地理解并解决问题。非常感谢你们给我这个机会自我介绍，我期待有更多的机会与你们交流。");
        list.add(map);

        map = new HashMap<>(2);
        map.put("role","user");
        map.put("content","南京好玩的TOP3");
        list.add(map);

        map = new HashMap<>(2);
        map.put("role","assistant");
        map.put("content","南京是一个历史文化底蕴深厚的城市，有很多值得一游的地方。以下是南京好玩的三个推荐：\\n\\n1. **夫子庙**：位于秦淮河畔的夫子庙，是南京历史文化名胜区的主要景点之一。这里是中国古代学问的象征，也是宣传儒家思想的圣地。在夫子庙，你可以领略到古建筑的韵味，感受到厚重的历史文化底蕴。同时，这里还有各种小吃和购物点，让你可以在品尝美食和购买特色纪念品的同时，深入了解南京的历史文化。\\n2. **中山陵**：中山陵是孙中山先生的陵墓，位于南京钟山风景区内。它是中国近代伟大的民主革命先行者孙中山的陵墓，具有深远的历史意义和纪念价值。中山陵的建筑风格独特，环境优美，空气清新，给人以庄严、肃穆的感觉。在中山陵，你可以领略到中西建筑的完美结合，感受到历史的沧桑和民族的荣辱。\\n3. **南京博物院**：南京博物院是江苏省内最著名的博物馆之一，也是中国最大的博物馆之一。这里展品丰富，收藏了大量的珍贵文物，如陶瓷、书画、青铜器、玉器等。同时，这里还有许多有历史文化内涵的景点，如南明故宫等，是你了解南京和中国历史文化的好去处。\\n\\n以上三个地方都是南京最具代表性的旅游景点，无论是历史文化爱好者还是自然风光追求者，都能在这里找到自己的乐趣。希望你在南京的旅行中有个难忘的体验！");
        list.add(map);

        map = new HashMap<>(2);
        map.put("role","user");
        map.put("content","还有呢?");
        list.add(map);

        map = new HashMap<>(2);
        map.put("role","assistant");
        map.put("content","当然，南京还有很多其他值得一游的地方：\\n\\n4. **紫金山天文台**：紫金山天文台是中国科学院紫金山天文台的所在地，拥有丰富的天文资源和科研设备。除了可以欣赏到美丽的星空，还可以了解到天文科学的相关知识。\\n5. **玄武湖公园**：南京的象征之一，玄武湖公园是亚洲最大的皇家园林湖泊。这里不仅有美丽的湖光山色，还有许多历史悠久的古建筑和园林。\\n6. **明孝陵**：位于紫金山南麓的明孝陵，是明朝开国皇帝朱元璋和王皇后的陵墓。这是一处融合了南北建筑风格的明朝皇家陵寝，极具历史和文化价值。\\n7. **老门东**：这是南京有特色的历史文化街区之一，有着南京独特的民居建筑和传统手工艺品。你可以品尝南京特色小吃，购买手工艺品，感受南京的传统文化。\\n8. **南京大屠杀纪念馆**：一个旨在纪念南京大屠杀历史、促进和平与国际友谊的纪念馆。你可以在这里了解到南京大屠杀的残忍历史，并感受到和平的重要性。\\n9. **栖霞山**：栖霞山位于南京市东北郊，是金陵文化的重要代表之一。栖霞山以其美丽的自然风光和丰富的人文资源而闻名，如千佛岩、南朝石刻等。\\n\\n以上只是南京众多景点中的一部分，每个角落都可能隐藏着深厚的历史文化底蕴和美丽的风景。希望你在南京的旅程中能有所收获，充实而愉快！");
        list.add(map);

//        map.put("role", "user");
//        map.put("content", "一加一等于几");
//        list.add(map);
//
//        map = new HashMap<>(2);
//        map.put("role", "assistant");
//        map.put("content", "计算结果为：1 + 1 = 2");
//        list.add(map);
//
//        map = new HashMap<>(2);
//        map.put("role", "user");
//        map.put("content", "再加五呢?");
//        list.add(map);

        params.put("messages", list);
        System.out.println(list);
        Map<String, Object> dopost = OKHttpUtil.dopost(url, params);
        System.out.println(dopost);

    }

    private static String getToken() throws IOException {
        // 获取access_token
        String url = "https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=" + API_KEY + "&client_secret=" + SECRET_KEY;
        JSONObject params = new JSONObject();
        Map<String, Object> map = OKHttpUtil.dopost(url, params);
        if ("200".equals(map.get("status").toString())) {
            JSONObject accessTokenJSON = JSON.parseObject(map.get("result").toString());
            return accessTokenJSON.get("access_token").toString();
        }
        return null;
    }
}
